This invention relates to the field of debug services. In particular, the invention relates to a remote debug service in a cloud environment.
Cloud computing is network-based computing in which shared resources, software, and information are provided to computers and other devices on demand. Debugging in the cloud environment is more challenging than in the traditional server world. This is because virtualization in the cloud environment obscures the resources, and an application can be moved around, scaled up or down without any visible sign. Internet Protocol (IP) addresses are also not stable, so connectivity of the debugger to the debugee is uncertain.
Debuggers tend to have a connection model where the process is either run from the debugger, or the debugger is attached after the process is running—usually killing the process at the end of the debug session. That does not really fit a model where processes are transient, and it is not known up front which one will crash.
Known solutions for troubleshooting within a cloud environment are to collect trace and logs which may be pulled into one central location for analysis. These suffer from the following disadvantages.
The trace has to be so complete as to allow analysis of the problem without real-time decision making, so values of all variables etc. have to be known. This makes the trace very large, and possibly causes performance problems in the deployed system because so much information must be gathered.
The trace is always from many processes/threads and not just the one that caused the problem. Locating the right log is a major task in itself.
The debugging is always post-mortem; there is no possibility to break into the flow, alter variables and continue.
Debugging normally works in the following ways:
1) The process to be debugged is already running and can accept a connection from a debugger. The debugger is run and connects to the process.
Alternatively,
2) The process is started in a special way with the debugger already attached to it.
Neither of these methods of debugging is suitable for cloud deployments, where an unspecified number of processes are running, and the user does not know which process will be the one which is going to fail.
Therefore, there is a need in the art to address the aforementioned problems.